home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / MIDI.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  12.4 KB  |  350 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        MIDI.mod
  3.  
  4.      Contains:    MIDI Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$TAGS-*)
  21. (*$CALLING PASCAL*)
  22. MODULE MIDI;
  23.  
  24. IMPORT SYSTEM, Types;
  25.  
  26. (* $PUSH*)
  27. (* $ALIGN MAC68K*)
  28. (* $LibExport+*)
  29.  
  30. CONST
  31.     midiToolNum*                    = 4;                            (*tool number of MIDI Manager for SndDispVersion call*)
  32.     midiMaxNameLen*                = 31;                            (*maximum number of characters in port and client names*)
  33. (* Sound.Time formats *)
  34.     midiFormatMSec*                = 0;                            (*milliseconds*)
  35.     midiFormatBeats*                = 1;                            (*beats*)
  36.     midiFormat24fpsBit*            = 2;                            (*24 frames/sec.*)
  37.     midiFormat25fpsBit*            = 3;                            (*25 frames/sec.*)
  38.     midiFormat30fpsDBit*            = 4;                            (*30 frames/sec. drop-frame*)
  39.     midiFormat30fpsBit*            = 5;                            (*30 frames/sec.*)
  40.     midiFormat24fpsQF*            = 6;                            (*24 frames/sec. longInt format *)
  41.     midiFormat25fpsQF*            = 7;                            (*25 frames/sec. longInt format *)
  42.     midiFormat30fpsDQF*            = 8;                            (*30 frames/sec. drop-frame longInt format *)
  43.     midiFormat30fpsQF*            = 9;                            (*30 frames/sec. longInt format *)
  44.     midiInternalSync*            = 0;                            (*internal sync*)
  45.     midiExternalSync*            = 1;                            (*external sync*)
  46. (* Port types*)
  47.     midiPortTypeTime*            = 0;                            (*time port*)
  48.     midiPortTypeInput*            = 1;                            (*input port*)
  49.     midiPortTypeOutput*            = 2;                            (*output port*)
  50.     midiPortTypeTimeInv*            = 3;                            (*invisible time port*)
  51. (* OffsetTimes  *)
  52.     midiGetEverything*            = $7FFFFFFF;                    (*get all packets, regardless of time stamps*)
  53.     midiGetNothing*                = $80000000;                    (*get no packets, regardless of time stamps*)
  54.     midiGetCurrent*                = $00000000;                    (*get current packets only*)
  55.  
  56. (*    MIDI data and messages are passed in MIDIPacket records (see below).
  57.     The first byte of every MIDIPacket contains a set of flags
  58.  
  59.     bits 0-1    00* = new MIDIPacket, not continued
  60.                      01* = begining of continued MIDIPacket
  61.                      10* = end of continued MIDIPacket
  62.                      11* = continuation
  63.     bits 2-3     reserved
  64.  
  65.     bits 4-6      000* = packet contains MIDI data
  66.  
  67.                   001* = packet contains MIDI Manager message
  68.  
  69.     bit 7         0* = MIDIPacket has valid stamp
  70.                   1* = stamp with current clock
  71. *)
  72.     midiContMask*                = $03;
  73.     midiNoCont*                    = $00;
  74.     midiStartCont*                = $01;
  75.     midiMidCont*                    = $03;
  76.     midiEndCont*                    = $02;
  77.     midiTypeMask*                = $70;
  78.     midiMsgType*                    = $00;
  79.     midiMgrType*                    = $10;
  80.     midiTimeStampMask*            = $80;
  81.     midiTimeStampCurrent*        = $80;
  82.     midiTimeStampValid*            = $00;
  83. (* MIDIPacket command words (the first word in the data field for midiMgrType messages) *)
  84.     midiOverflowErr*                = $0001;
  85.     midiSCCErr*                    = $0002;
  86.     midiPacketErr*                = $0003;
  87. (*all command words less than this value are error indicators*)
  88.     midiMaxErr*                    = $00FF;
  89. (* Valid results to be returned by readHooks *)
  90.     midiKeepPacket*                = 0;
  91.     midiMorePacket*                = 1;
  92.     midiNoMorePacket*            = 2;
  93. (* Driver calls *)
  94.     midiOpenDriver*                = 1;
  95.     midiCloseDriver*                = 2;
  96.  
  97.  
  98. TYPE
  99.     MIDIPacket* = (*ΔΔPACKEDΔΔ*) RECORD
  100.         flags*:                    Types.UInt8;
  101.         len*:                    Types.UInt8;
  102.         tStamp*:                    LONGINT;
  103.         data*:                    ARRAY 249 (*ΔΔ[0..248]ΔΔ*) OF Types.UInt8;
  104.     END;
  105.  
  106.     MIDIPacketPtr* = POINTER TO MIDIPacket;
  107.  
  108.     MIDIReadHookProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (myPacket: MIDIPacketPtr; myRefCon: LONGINT): INTEGER;
  109.     MIDITimeProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (curTime: LONGINT; myRefCon: LONGINT);
  110.     MIDIReadHookUPP* = Types.UniversalProcPtr;
  111.     MIDITimeUPP* = Types.UniversalProcPtr;
  112.  
  113.     MIDIClkInfo* = RECORD
  114.         syncType*:                INTEGER;                                (*synchronization external/internal*)
  115.         curTime*:                LONGINT;                                (*current value of port's clock*)
  116.         format*:                    INTEGER;                                (*time code format*)
  117.     END;
  118.  
  119.     MIDIIDRec* = RECORD
  120.         clientID*:                Types.OSType;
  121.         portID*:                    Types.OSType;
  122.     END;
  123.  
  124.     MIDIPortInfo* = RECORD
  125.         portType*:                INTEGER;                                (*type of port*)
  126.         timeBase*:                MIDIIDRec;                                (*MIDIIDRec for time base*)
  127.         numConnects*:            INTEGER;                                (*number of connections*)
  128.         cList*:                    ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF MIDIIDRec;                (*ARRAY [1..numConnects] of MIDIIDRec*)
  129.     END;
  130.  
  131.     MIDIPortInfoPtr* = POINTER TO MIDIPortInfo;
  132.     MIDIPortInfoHdl* = HANDLE TO MIDIPortInfo(*ΔΔ POINTER TO MIDIPortInfoPtr*);
  133.     MIDIPortInfoHandle* = HANDLE TO MIDIPortInfo(*ΔΔ POINTER TO MIDIPortInfoPtr*);
  134.  
  135.     MIDIPortParams* = RECORD
  136.         portID*:                    Types.OSType;                                    (*AIFF.ID of port, unique within client*)
  137.         portType*:                INTEGER;                                (*Type of port - input, output, time, etc.*)
  138.         timeBase*:                INTEGER;                                (*refnum of time base, 0 if none*)
  139.         offsetTime*:                LONGINT;                                (*offset for current time stamps*)
  140.         readHook*:                MIDIReadHookUPP;                        (*routine to call when input data is valid*)
  141.         refCon*:                    LONGINT;                                (*refcon for port (for client use)*)
  142.         initClock*:                MIDIClkInfo;                            (*initial settings for a time base*)
  143.         name*:                    Types.Str255;                                    (*name of the port, This is a real live string, not a ptr.*)
  144.     END;
  145.  
  146.     MIDIPortParamsPtr* = POINTER TO MIDIPortParams;
  147.  
  148.     MIDIIDList* = RECORD
  149.         numIDs*:                    INTEGER;
  150.         list*:                    ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF Types.OSType;
  151.     END;
  152.  
  153.     MIDIIDListPtr* = POINTER TO MIDIIDList;
  154.     MIDIIDListHdl* = HANDLE TO MIDIIDList (*ΔΔ POINTER TO MIDIIDListPtr*);
  155.     MIDIIDListHandle* = HANDLE TO MIDIIDList (*ΔΔ POINTER TO MIDIIDListPtr*);
  156.  
  157.  
  158. (*•• PROCEDURE MIDIVersion*(): Types.NumVersion;
  159.     (*$IF NOT GENERATINGCFM*)
  160.     INLINE PASCAL $203C, $0000, 4, $A800;
  161.     (*$END*)*)
  162. PROCEDURE MIDISignIn*(clientID: Types.OSType; refCon: LONGINT; icon: Types.Handle; name: Types.ConstStr255Param): Types.OSErr;
  163.     (*$IF NOT GENERATINGCFM*)
  164.     INLINE PASCAL $203C, $0004, 4, $A800;
  165.     (*$END*)
  166. PROCEDURE MIDISignOut*(clientID: Types.OSType);
  167.     (*$IF NOT GENERATINGCFM*)
  168.     INLINE PASCAL $203C, $0008, 4, $A800;
  169.     (*$END*)
  170. PROCEDURE MIDIGetClients*(): MIDIIDListHandle;
  171.     (*$IF NOT GENERATINGCFM*)
  172.     INLINE PASCAL $203C, $000C, 4, $A800;
  173.     (*$END*)
  174. PROCEDURE MIDIGetClientName*(clientID: Types.OSType; VAR name: Types.Str255);
  175.     (*$IF NOT GENERATINGCFM*)
  176.     INLINE PASCAL $203C, $0010, 4, $A800;
  177.     (*$END*)
  178. PROCEDURE MIDISetClientName*(clientID: Types.OSType; name: Types.ConstStr255Param);
  179.     (*$IF NOT GENERATINGCFM*)
  180.     INLINE PASCAL $203C, $0014, 4, $A800;
  181.     (*$END*)
  182. PROCEDURE MIDIGetPorts*(clientID: Types.OSType): MIDIIDListHandle;
  183.     (*$IF NOT GENERATINGCFM*)
  184.     INLINE PASCAL $203C, $0018, 4, $A800;
  185.     (*$END*)
  186. PROCEDURE MIDIAddPort*(clientID: Types.OSType; BufSize: INTEGER; VAR refnum: INTEGER; init: MIDIPortParamsPtr): Types.OSErr;
  187.     (*$IF NOT GENERATINGCFM*)
  188.     INLINE PASCAL $203C, $001C, 4, $A800;
  189.     (*$END*)
  190. PROCEDURE MIDIGetPortInfo*(clientID: Types.OSType; portID: Types.OSType): MIDIPortInfoHandle;
  191.     (*$IF NOT GENERATINGCFM*)
  192.     INLINE PASCAL $203C, $0020, 4, $A800;
  193.     (*$END*)
  194. PROCEDURE MIDIConnectData*(srcClID: Types.OSType; srcPortID: Types.OSType; dstClID: Types.OSType; dstPortID: Types.OSType): Types.OSErr;
  195.     (*$IF NOT GENERATINGCFM*)
  196.     INLINE PASCAL $203C, $0024, 4, $A800;
  197.     (*$END*)
  198. PROCEDURE MIDIUnConnectData*(srcClID: Types.OSType; srcPortID: Types.OSType; dstClID: Types.OSType; dstPortID: Types.OSType): Types.OSErr;
  199.     (*$IF NOT GENERATINGCFM*)
  200.     INLINE PASCAL $203C, $0028, 4, $A800;
  201.     (*$END*)
  202. PROCEDURE MIDIConnectTime*(srcClID: Types.OSType; srcPortID: Types.OSType; dstClID: Types.OSType; dstPortID: Types.OSType): Types.OSErr;
  203.     (*$IF NOT GENERATINGCFM*)
  204.     INLINE PASCAL $203C, $002C, 4, $A800;
  205.     (*$END*)
  206. PROCEDURE MIDIUnConnectTime*(srcClID: Types.OSType; srcPortID: Types.OSType; dstClID: Types.OSType; dstPortID: Types.OSType): Types.OSErr;
  207.     (*$IF NOT GENERATINGCFM*)
  208.     INLINE PASCAL $203C, $0030, 4, $A800;
  209.     (*$END*)
  210. PROCEDURE MIDIFlush*(refnum: INTEGER);
  211.     (*$IF NOT GENERATINGCFM*)
  212.     INLINE PASCAL $203C, $0034, 4, $A800;
  213.     (*$END*)
  214. PROCEDURE MIDIGetReadHook*(refnum: INTEGER): Types.ProcPtr;
  215.     (*$IF NOT GENERATINGCFM*)
  216.     INLINE PASCAL $203C, $0038, 4, $A800;
  217.     (*$END*)
  218. PROCEDURE MIDISetReadHook*(refnum: INTEGER; hook: Types.ProcPtr);
  219.     (*$IF NOT GENERATINGCFM*)
  220.     INLINE PASCAL $203C, $003C, 4, $A800;
  221.     (*$END*)
  222. PROCEDURE MIDIGetPortName*(clientID: Types.OSType; portID: Types.OSType; VAR name: Types.Str255);
  223.     (*$IF NOT GENERATINGCFM*)
  224.     INLINE PASCAL $203C, $0040, 4, $A800;
  225.     (*$END*)
  226. PROCEDURE MIDISetPortName*(clientID: Types.OSType; portID: Types.OSType; name: Types.ConstStr255Param);
  227.     (*$IF NOT GENERATINGCFM*)
  228.     INLINE PASCAL $203C, $0044, 4, $A800;
  229.     (*$END*)
  230. PROCEDURE MIDIWakeUp*(refnum: INTEGER; time: LONGINT; period: LONGINT; timeProc: MIDITimeUPP);
  231.     (*$IF NOT GENERATINGCFM*)
  232.     INLINE PASCAL $203C, $0048, 4, $A800;
  233.     (*$END*)
  234. PROCEDURE MIDIRemovePort*(refnum: INTEGER);
  235.     (*$IF NOT GENERATINGCFM*)
  236.     INLINE PASCAL $203C, $004C, 4, $A800;
  237.     (*$END*)
  238. PROCEDURE MIDIGetSync*(refnum: INTEGER): INTEGER;
  239.     (*$IF NOT GENERATINGCFM*)
  240.     INLINE PASCAL $203C, $0050, 4, $A800;
  241.     (*$END*)
  242. PROCEDURE MIDISetSync*(refnum: INTEGER; sync: INTEGER);
  243.     (*$IF NOT GENERATINGCFM*)
  244.     INLINE PASCAL $203C, $0054, 4, $A800;
  245.     (*$END*)
  246. PROCEDURE MIDIGetCurTime*(refnum: INTEGER): LONGINT;
  247.     (*$IF NOT GENERATINGCFM*)
  248.     INLINE PASCAL $203C, $0058, 4, $A800;
  249.     (*$END*)
  250. PROCEDURE MIDISetCurTime*(refnum: INTEGER; time: LONGINT);
  251.     (*$IF NOT GENERATINGCFM*)
  252.     INLINE PASCAL $203C, $005C, 4, $A800;
  253.     (*$END*)
  254. PROCEDURE MIDIStartTime*(refnum: INTEGER);
  255.     (*$IF NOT GENERATINGCFM*)
  256.     INLINE PASCAL $203C, $0060, 4, $A800;
  257.     (*$END*)
  258. PROCEDURE MIDIStopTime*(refnum: INTEGER);
  259.     (*$IF NOT GENERATINGCFM*)
  260.     INLINE PASCAL $203C, $0064, 4, $A800;
  261.     (*$END*)
  262. PROCEDURE MIDIPoll*(refnum: INTEGER; offsetTime: LONGINT);
  263.     (*$IF NOT GENERATINGCFM*)
  264.     INLINE PASCAL $203C, $0068, 4, $A800;
  265.     (*$END*)
  266. PROCEDURE MIDIWritePacket*(refnum: INTEGER; packet: MIDIPacketPtr): Types.OSErr;
  267.     (*$IF NOT GENERATINGCFM*)
  268.     INLINE PASCAL $203C, $006C, 4, $A800;
  269.     (*$END*)
  270. PROCEDURE MIDIWorldChanged*(clientID: Types.OSType): BOOLEAN;
  271.     (*$IF NOT GENERATINGCFM*)
  272.     INLINE PASCAL $203C, $0070, 4, $A800;
  273.     (*$END*)
  274. PROCEDURE MIDIGetOffsetTime*(refnum: INTEGER): LONGINT;
  275.     (*$IF NOT GENERATINGCFM*)
  276.     INLINE PASCAL $203C, $0074, 4, $A800;
  277.     (*$END*)
  278. PROCEDURE MIDISetOffsetTime*(refnum: INTEGER; offsetTime: LONGINT);
  279.     (*$IF NOT GENERATINGCFM*)
  280.     INLINE PASCAL $203C, $0078, 4, $A800;
  281.     (*$END*)
  282. PROCEDURE MIDIConvertTime*(srcFormat: INTEGER; dstFormat: INTEGER; time: LONGINT): LONGINT;
  283.     (*$IF NOT GENERATINGCFM*)
  284.     INLINE PASCAL $203C, $007C, 4, $A800;
  285.     (*$END*)
  286. PROCEDURE MIDIGetRefCon*(refnum: INTEGER): LONGINT;
  287.     (*$IF NOT GENERATINGCFM*)
  288.     INLINE PASCAL $203C, $0080, 4, $A800;
  289.     (*$END*)
  290. PROCEDURE MIDISetRefCon*(refnum: INTEGER; refCon: LONGINT);
  291.     (*$IF NOT GENERATINGCFM*)
  292.     INLINE PASCAL $203C, $0084, 4, $A800;
  293.     (*$END*)
  294. PROCEDURE MIDIGetClRefCon*(clientID: Types.OSType): LONGINT;
  295.     (*$IF NOT GENERATINGCFM*)
  296.     INLINE PASCAL $203C, $0088, 4, $A800;
  297.     (*$END*)
  298. PROCEDURE MIDISetClRefCon*(clientID: Types.OSType; refCon: LONGINT);
  299.     (*$IF NOT GENERATINGCFM*)
  300.     INLINE PASCAL $203C, $008C, 4, $A800;
  301.     (*$END*)
  302. PROCEDURE MIDIGetTCFormat*(refnum: INTEGER): INTEGER;
  303.     (*$IF NOT GENERATINGCFM*)
  304.     INLINE PASCAL $203C, $0090, 4, $A800;
  305.     (*$END*)
  306. PROCEDURE MIDISetTCFormat*(refnum: INTEGER; format: INTEGER);
  307.     (*$IF NOT GENERATINGCFM*)
  308.     INLINE PASCAL $203C, $0094, 4, $A800;
  309.     (*$END*)
  310. PROCEDURE MIDISetRunRate*(refnum: INTEGER; rate: INTEGER; time: LONGINT);
  311.     (*$IF NOT GENERATINGCFM*)
  312.     INLINE PASCAL $203C, $0098, 4, $A800;
  313.     (*$END*)
  314. PROCEDURE MIDIGetClientIcon*(clientID: Types.OSType): Types.Handle;
  315.     (*$IF NOT GENERATINGCFM*)
  316.     INLINE PASCAL $203C, $009C, 4, $A800;
  317.     (*$END*)
  318. PROCEDURE SndDispVersion*(toolnum: INTEGER): LONGINT;
  319.     (*$IF NOT GENERATINGCFM*)
  320.     INLINE PASCAL $203C, $0000, $0000, $A800;
  321.     (*$END*)
  322. CONST
  323.     uppMIDIReadHookProcInfo* = $000003E0; (* PROCEDURE (4 byte param, 4 byte param): 2 byte result; *)
  324.     uppMIDITimeProcInfo* = $000003C0; (* PROCEDURE (4 byte param, 4 byte param); *)
  325.  
  326. PROCEDURE NewMIDIReadHookProc*(userRoutine: MIDIReadHookProcPtr): MIDIReadHookUPP;
  327.     (*$IF NOT GENERATINGCFM *)
  328.     INLINE PASCAL $2E9F;
  329.     (*$END*)
  330.  
  331. PROCEDURE NewMIDITimeProc*(userRoutine: MIDITimeProcPtr): MIDITimeUPP;
  332.     (*$IF NOT GENERATINGCFM *)
  333.     INLINE PASCAL $2E9F;
  334.     (*$END*)
  335.  
  336. PROCEDURE CallMIDIReadHookProc*(myPacket: MIDIPacketPtr; myRefCon: LONGINT; userRoutine: MIDIReadHookUPP): INTEGER;
  337.     (*$IF NOT GENERATINGCFM*)
  338.     INLINE PASCAL $205F, $4E90;
  339.     (*$END*)
  340.  
  341. PROCEDURE CallMIDITimeProc*(curTime: LONGINT; myRefCon: LONGINT; userRoutine: MIDITimeUPP);
  342.     (*$IF NOT GENERATINGCFM*)
  343.     INLINE PASCAL $205F, $4E90;
  344.     (*$END*)
  345.  
  346. (* $ALIGN RESET*)
  347. (* $POP*)
  348.  
  349.  END MIDI.
  350.